home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / sbin / luksformat < prev    next >
Text File  |  2009-10-14  |  3KB  |  100 lines

  1. #!/usr/bin/perl -w
  2.  
  3. # luksformat - wrapper around LUKS-capable cryptsetup and mkfs for easy
  4. # creation of an encrypted device.
  5. #
  6. # (C) 2005 Canonical Ltd.
  7. # Author: Martin Pitt <martin.pitt@ubuntu.com>
  8. # License: GNU General Public License, v2 or any later
  9. # (http://www.gnu.org/copyleft/gpl.html)
  10.  
  11. use Getopt::Long;
  12.  
  13. sub help() {
  14.     print "luksformat - Create and format an encrypted LUKS device
  15. Usage: luksformat [-t <file system>] <device>\n";
  16.     exit 1;
  17. }
  18.  
  19. # default file system
  20. $fs = 'vfat';
  21. exit 1 unless GetOptions ('t|type=s' => \$fs);
  22.  
  23. help() if $#ARGV != 0;
  24.  
  25. if ($> != 0) {
  26.     print STDERR "This program needs to be started as root\n";
  27.     exit 1;
  28. }
  29.  
  30. $device = $ARGV[0];
  31.  
  32. open(MOUNTS, "/proc/mounts");
  33. while (<MOUNTS>) {
  34.     die "Error: device mounted: $device\n" if (/\Q$device\E/)
  35. }
  36.  
  37. $mkfs = "/sbin/mkfs.$fs";
  38. if (! -x $mkfs) {
  39.     print STDERR "Error: invalid file system: $fs\n";
  40.     exit 1;
  41. }
  42.  
  43. # generate temporary mapped device name which is not yet used
  44. $name = "";
  45. for ($i = 1; $i < 100; $i++) {
  46.     if (! -e "/dev/mapper/luksformat$i") {
  47.     $name = "luksformat$i";
  48.     last;
  49.     }
  50. }
  51.  
  52. $name or die "Error: could not generate temporary mapped device name";
  53.  
  54. # we do not need to be overly concerned with race conditions here, cryptsetup
  55. # will just fail if the name already exists now.
  56. print "Creating encrypted device on $device...\n";
  57. if ((system 'cryptsetup', 'luksFormat', '-s', '256', '--cipher', 'aes-cbc-essiv:sha256', $device)) {
  58.     die "Could not create LUKS device $device";
  59. }
  60.  
  61. print "Please enter your passphrase again to verify it\n";
  62. if ((system 'cryptsetup', 'luksOpen', $device, $name) != 0) {
  63.     print STDERR "The passphrases you entered were not identical\n";
  64.     exit 1;
  65. }
  66.  
  67. $result = system $mkfs, "/dev/mapper/$name";
  68. print "\n";
  69. system 'cryptsetup', 'luksClose', $name;
  70.  
  71. die "Could not format device with file system $fs" if $result;
  72.  
  73. __END__
  74.  
  75. =head1 NAME
  76.  
  77. luksformat - Create and format an encrypted LUKS device 
  78.  
  79. =head1 SYNOPSIS
  80.  
  81. B<luksformat> [B<-t> I<fstype>] I<device>
  82.  
  83. =head1 DESCRIPTION
  84.  
  85. B<luksformat> is a wrapper around B<cryptsetup> and B<mkfs> which provides an
  86. easy interface for creating an encrypted device that follows the LUKS standard
  87. and for putting a file system onto the encrypted device.
  88.  
  89. The default file system is B<vfat> since that is most commonly used on
  90. removable devices. However, you can specify any available file system with the
  91. B<-t> option.
  92.  
  93. =head1 SEE ALSO
  94.  
  95. L<cryptsetup(8)>, L<mkfs(8)>
  96.  
  97. =head1 AUTHOR
  98.  
  99. This program was written by Martin Pitt <martin.pitt@ubuntu.com>.
  100.